分组: 按照某个字段或多个字段进行分组,字段中值相等的为一组,然后将这一组合并成一条数据

分组的作用: 一般用来统计数据 和 对查询到的数据进去重

聚合函数: -> 分组一般和聚合函数搭配着使用

  • avg() -> 返回平均值
  • count() -> 返回一共有多少条数据,在使用count的时候最好只传 1 (这个1在下面聚合函数的使用的第二个例子有进行说明) 或 主键的字段名
  • max() -> 返回最大值 
  • min() -> 返回最小值
  • sum() -> 返回和

对于聚合函数的结果进行条件的筛选只能使用 having 关键字,不能使用 where。(可以在分组语句中使用 where 条件筛选,但是 where 后面不能是聚合函数的结果,且 where 条件筛选必须在 group by 前面,先进行筛选再进行分组)

最好将以聚合函数方式命名的列名使用 as 起别名的方式重新修改一下列名,这样会看起来更明白一下

在使用分组返回数据的时候,需要返回的数据最好不要有冲突的,例如以部门为前提将相同部门的分成一组,而此时如果你想将id展示出来那么就会报错,因为相同部门的数据已经分成了一组,它不知道返回这一组数据中哪一个id给你

该表的所有数据


1. 聚合函数的使用

  • 统计该表有多少条数据

select count(id) as total from staff;


  • 在进行数据统计的时候有些人会直接协程 count( 常量->数字 ),这样也是可以统计出来的。因为在前面也提到过在查询数据的过程中写了一个常量(数字),那么该常量就会形成一个新的列,而这一新列也是可以被计算出总数的

select count(1) as total from staff;


  • 查询该表中年纪最大的

select * from staff where age in (select max(age) from staff);


2. 分组的使用

  • 统计各个部门的人数

# select 字段名, 聚合函数(字段名) from 表名 group by 需要进行统计的字段名;

select department,count(department) as quantity from staff group by department;


  • 统计男生年龄小于25岁的个数 -> 可以在分组语句中使用 where 条件筛选,但是 where 后面不能是聚合函数的结果

select sex,count(sex) as quantity  from staff where age < 25 and sex = '男' group by sex;


  • 显示部门人数大于2的部门 -> 对于聚合函数的结果进行条件的筛选只能使用 having 关键字

# select 字段名, 聚合函数(字段名) from 表名 group by 需要进行统计的字段名 having 使用聚合函数结果进行判断的条件;

select department,count(department) as quantity from staff group by department having count(department) >= 2;